package org.darcy.youchat.service;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Environment;
import android.text.TextUtils;
import android.util.Log;

import org.darcy.youchat.library.emoji.YouChatEmotionKit;
import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.SDKOptions;
import com.netease.nimlib.sdk.StatusBarNotificationConfig;
import com.netease.nimlib.sdk.auth.LoginInfo;
import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;
import com.netease.nimlib.sdk.msg.model.IMMessage;
import com.netease.nimlib.sdk.uinfo.UserInfoProvider;
import com.netease.nimlib.sdk.uinfo.model.UserInfo;

import org.darcy.youchat.activity.login.SplashActivity;
import org.darcy.youchat.model.UserCache;
import org.darcy.youchat.nimsdk.NimAccountSDK;
import org.darcy.youchat.nimsdk.utils.ScreenUtil;
import org.darcy.youchat.nimsdk.utils.StorageUtils;

/**
 * 网易云信服务
 */
public class NimService {

    /**
     * 网易云信初始化
     */
    public static void initNim(Context mContext ) {
        String packageName = mContext.getPackageName();
        Log.d("NimService", "网易云信初始化, 包名：" + packageName);
        YouChatEmotionKit.init(mContext);
        // SDK初始化（启动后台服务，若已经存在用户登录信息， SDK 将完成自动登录，只是后台登录而已，跳转逻辑需要自己处理）
        NIMClient.init(mContext, loginInfo(), options(packageName));
        StorageUtils.init(mContext, packageName);
        ScreenUtil.init(mContext);
    }


    /*================== 网易云信 Begin ==================*/
    // 如果返回值为 null，则全部使用默认参数。
    private static SDKOptions options(String packageName) {
        SDKOptions options = new SDKOptions();
        // 如果将新消息通知提醒托管给 SDK 完成，需要添加以下配置。否则无需设置。
        StatusBarNotificationConfig config = new StatusBarNotificationConfig();
        // 点击通知栏跳转到该Activity
        config.notificationEntrance = SplashActivity.class;
        // 呼吸灯配置
        config.ledARGB = Color.GREEN;
        config.ledOnMs = 1000;
        config.ledOffMs = 1500;
        // 通知铃声的uri字符串
        config.notificationSound = "android.resource://org.darcy.youchat/raw/msg";
        options.statusBarNotificationConfig = config;
        // 配置保存图片，文件，log 等数据的目录
        // 如果 options 中没有设置这个值，SDK 会使用下面代码示例中的位置作为 SDK 的数据目录。
        // 该目录目前包含 log, file, image, audio, video, thumb 这6个目录。
        // 如果第三方 APP 需要缓存清理功能， 清理这个目录下面个子目录的内容即可。
        options.sdkStorageRootPath = Environment.getExternalStorageDirectory() + "/" + packageName + "/nim";
        // 配置是否需要预下载附件缩略图，默认为 true
        options.preloadAttach = true;
        // 配置附件缩略图的尺寸大小。表示向服务器请求缩略图文件的大小
        // 该值一般应根据屏幕尺寸来确定， 默认值为 Screen.width / 2
        options.thumbnailSize = 720 / 2;
        // 用户资料提供者, 目前主要用于提供用户资料，用于新消息通知栏中显示消息来源的头像和昵称
        options.userInfoProvider = new UserInfoProvider() {
            @Override
            public UserInfo getUserInfo(String account) {
                return null;
            }

            @Override
            public String getDisplayNameForMessageNotifier(String account, String sessionId,
                                                           SessionTypeEnum sessionType) {
                return null;
            }

            @Override
            public Bitmap getAvatarForMessageNotifier(SessionTypeEnum sessionType, String sessionId) {
                return null;
            }

            @Override
            public String getDisplayTitleForMessageNotifier(IMMessage message) {
                return null;
            }
        };
        return options;
    }

    // 如果已经存在用户登录信息，返回LoginInfo，否则返回null即可
    private static LoginInfo loginInfo() {
        // 从本地读取上次登录成功时保存的用户登录信息
        String account = NimAccountSDK.getUserAccount();
        String token = NimAccountSDK.getUserAccount();
        if (!TextUtils.isEmpty(account) && !TextUtils.isEmpty(token)) {
            //加载用户信息
            UserCache.setAccount(account);
            return new LoginInfo(account, token);
        } else {
            return null;
        }
    }
    /*================== 网易云信 End ==================*/
}
